//
//  ViewController.m
//  全局变量
//
//  Created by YYY on 2018/1/12.
//  Copyright © 2018年 YYY. All rights reserved.
//

#import "ViewController.h"
#import "TestViewController.h"

//宏 大量用宏会导致二进制文件变大
#define Weather @"今天是个好天气"

//全局变量，可以通过extern访问
NSInteger rowHeight = 100;

//static修饰，局部变量，外界不能访问
static NSInteger wage;

//static const修饰，局部变量，外界不能访问
static const NSString *job = @"心情比较低落";

//const修饰，全局常量，外界可以通过extern进行访问
const NSString *work = @"周六过来正常上班";

//const修饰，全局常量，外界可以通过extern进行访问
NSString const *study = @"好好学习";

//定义一个常量又不想被修改
NSString * const singer = @"全民K歌";
NSInteger const money = 8000;

//当你在你自己的.m文件中需要声明一个只有你自己可见的局部变量的时候,一定要同时使用“static”和“const”两个符号
//static修饰，外界不能访问到，const表示常量
static const NSTimeInterval kAnimateDuration = 0.3;

//static修饰的变量必须放在@implementation外面或方法中，它只在程序启动初始化一次
//static修饰的变量，是一个私有的全局变量。

extern NSString *myString = @"Good night !";

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //kAnimateDuration = 0.9;
    
    NSLog(@"宏： %@", Weather);
    
    NSLog(@"全局变量1： %ld", rowHeight);
    rowHeight = 200;
    NSLog(@"修改后的全局变量1： %ld", rowHeight);
    
    wage = 9000;
    NSLog(@"局部变量1： %ld", wage);
    wage = 20000;
    NSLog(@"修改后的局部变量2： %ld", wage);
    
    NSLog(@"局部变量2： %@", job);
    job = @"淘宝";
    NSLog(@"修改后的局部变量2： %@", job);
    
    NSLog(@"全局常量： %@", work);
    work = @"上市公司";
    NSLog(@"修改后的全局常量： %@", work);
    
    //singer = @"098765"; 出错
    NSLog(@"全局常量： %@", singer);

    [self test];
    
    [self test2];
}

- (void)test
{
    //const右边的总不能被修改
    const NSString *string1 = @"Nice to meet you !";
    NSLog(@"修改前：string1 = %@", string1);
    string1 = @"Thank you !";
    NSLog(@"修改后：string1 = %@", string1);
    
    NSString const *string2 = @"Good luck !";
    NSLog(@"修改前：string2 = %@", string2);
    string2 = @"Happy New Year !";
    NSLog(@"修改后：string2 = %@", string2);
    
    NSString * const string3 = @"勾心斗角 !";
    NSLog(@"修改前：string3 = %@", string3);
    //string3 = @"一事无成的败类 !"; 出错
    NSLog(@"修改后：string3 = %@", string3);
}
- (void)test2
{
    static const NSString *str = @"hello world";
    NSLog(@"内存地址1：%p", &str);
    
    str = @"happy new year";
    NSLog(@"内存地址2：%p", &str);
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    TestViewController *testVC = [[TestViewController alloc]init];
    [self presentViewController:testVC animated:YES completion:nil];
}


@end
